// 导出一个axios的实例  而且这个实例要有请求拦截器 响应拦截器
import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import { getTokenTime } from '@/utils/auth'
import router from '@/router'
const timeOut = 2 * 60 * 60 * 1000

// const timeOut = 5 * 1000
const require = axios.create({
  // 实现自动化的转换生产环境和开发环境的基准地址
  baseURL: process.env.VUE_APP_BASE_API
  // baseURL: 'http://localhost:8083/api/'
}) // 创建一个axios的实例

// 请求拦截器
require.interceptors.request.use((config) => {
  // 如果有token
  if (store.state.user.token) {
    // 主动处理
    if (isTimeOut()) {
      // 请求拦截的promise错误可以进入响应拦截的err
      // 执行退出
      store.commit('user/logout')
      router.push('/login')
      return Promise.reject(new Error('登录过期'))
    }
    config.headers.Authorization = 'Bearer ' + store.state.user.token
  }
  return config
})

// 响应拦截器
require.interceptors.response.use(

  // 请求成功
  (res) => {
    const { success, message, data } = res.data

    // 业务成功
    if (success) {
      return data
    } else {
      // 业务失败
      Message.error(message)
      // 业务失败 若不用promise.rejiect就没办法获取错误 那就会走成功的代码  (newError 获取制造的错误)
      return Promise.reject(new Error(message))
    }
  },
  // 请求失败
  (err) => {
    console.log(err)
    if (err.response && err.response.status === 401) {
      Message.error('登录已过期')
      // 执行退出
      store.commit('user/logout')
      router.push('/login')
    }
    Message.error(err.message)
    return Promise.reject(err)
  }
)

// 封装token的方法函数
function isTimeOut() {
  const currentTime = Date.now()
  const tikenTime = getTokenTime()
  const time = currentTime - tikenTime
  // 如果当前时间-本地时间 >约定时间 表示过期

  return time >= timeOut
}
export default require // 导出axios实例
